package com.diudiutechnology.www.yadiudiu.yadiudiu.main;

import android.content.Context;
import android.support.multidex.MultiDexApplication;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.diudiutechnology.www.yadiudiu.util.utils.Sundry;
import com.diudiutechnology.www.yadiudiu.util.view.XUtilsImageLoader;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import org.xutils.x;

import cn.finalteam.galleryfinal.CoreConfig;
import cn.finalteam.galleryfinal.FunctionConfig;
import cn.finalteam.galleryfinal.GalleryFinal;
import cn.finalteam.galleryfinal.ThemeConfig;
import cn.jpush.android.api.JPushInterface;

/**
 * Created by Administrator on 2017/8/15.
 */

public class MyApplication extends MultiDexApplication implements BDLocationListener{
    public static MyApplication instance;
    // 定位相关
    LocationClient mLocClient;
    private double latitude = 0.00;//获取纬度信息
    private double longitude = 0.00;//获取经度信息
    private String addrStr ="";    //获取地址信息
    private String city ="";    //获取城市信息
    private  String district = "";    //获取区县信息
    private  String street = "";//获取街道信息
    private  String province = "";//获取省市
    private  String floor = "";//楼层信息
    private  String buildingName = "";//获取楼宇名称
    public static final String WX_APPID = "wx30c359eef38260d1";
    public static final String  APPSECRET="2f728600846ac30db053e2254fd01f04";
    private IWXAPI api;
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        x.Ext.init(this);
        x.Ext.setDebug(true);
        JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志
        JPushInterface.init(this); // 初始化 JPush
       // System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>stringmd5="+JPushInterface.getRegistrationID(this));
        // 在使用 SDK 各组间之前初始化 context 信息，传入 ApplicationContext
        SDKInitializer.initialize(this);
        //自4.3.0起，百度地图SDK所有接口均支持百度坐标和国测局坐标，用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标，默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
        mLocClient=initLoc(this);
        mLocClient.registerLocationListener(this);
        mLocClient.start();
        api = WXAPIFactory.createWXAPI(this, WX_APPID, true);
        api.registerApp(WX_APPID);

    }

    public static LocationClient initLoc(Context context) {
        // 定位初始化
        LocationClient mLocCli = new LocationClient(context);
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");
        //可选，默认gcj02，设置返回的定位结果坐标系
        int span=1000*5;
        option.setScanSpan(span);
        //可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);
        //可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);
        //可选，默认false,设置是否使用gps
        option.setLocationNotify(true);
        //可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);
        //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);
        //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);
        //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.setEnableSimulateGps(false);
        //可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        mLocCli.setLocOption(option);

        return mLocCli;
    }
    /**
     * 获取ApplicationContext
     *
     * @return
     * @Title: getContext
     * @Description: TODO
     * @return: Context
     */
    public static Context getContext() {
        return instance.getApplicationContext();
    }

    public static MyApplication getInstance() {
        return instance;
    }
    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public String getAddrStr() {
        return addrStr;
    }

    public void setAddrStr(String addrStr) {
        this.addrStr = addrStr;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getFloor() {
        return floor;
    }

    public void setFloor(String floor) {
        this.floor = floor;
    }

    public String getBuildingName() {
        return buildingName;
    }

    public void setBuildingName(String buildingName) {
        this.buildingName = buildingName;
    }

    /**
     * 定位SDK监听函数
     */

    @Override
    public void onReceiveLocation(BDLocation location) {

         latitude = location.getLatitude();//获取纬度信息
         longitude = location.getLongitude();//获取经度信息
       if (Sundry.isEmpty(location.getAddrStr())){
           addrStr="";
        }else {
           addrStr =location.getAddrStr();    //获取地址信息
       }

        if (Sundry.isEmpty(location.getCity())){
            city="";
        }else {
            city =location.getCity();    //获取城市信息
        }

        if (Sundry.isEmpty(location.getDistrict())){
            district="";
        }else {
            district = location.getDistrict();    //获取区县信息
        }

        if (Sundry.isEmpty(location.getStreet())){
            street="";
        }else {
            street = location.getStreet();//获取街道信息
        }

        if (Sundry.isEmpty(location.getProvince())){
            province="";
        }else {
            province =location.getProvince();//省份
        }

        if (Sundry.isEmpty(location.getFloor())){
            floor="";
        }else {
            floor=location.getFloor();//楼层信息
        }

        if (Sundry.isEmpty(location.getBuildingName())){
            buildingName="";
        }else {
            buildingName=location.getBuildingName();//获取楼宇名称
        }
//        //获取定位结果
//        location.getTime();    //获取定位时间
//        location.getLocationID();    //获取定位唯一ID，v7.2版本新增，用于排查定位问题
//        location.getLocType();    //获取定位类型
//        location.getRadius();    //获取定位精准度
//        location.getCountry();    //获取国家信息
//        location.getCountryCode();    //获取国家码
//        location.getCityCode();    //获取城市码
//        location.getStreetNumber();    //获取街道码
//        location.getLocationDescribe();    //获取当前位置描述信息
//        location.getPoiList();    //获取当前位置周边POI信息
//        location.getBuildingID();    //室内精准定位下，获取楼宇ID
//        location.getBuildingName();    //室内精准定位下，获取楼宇名称
//        location.getFloor();    //室内精准定位下，获取当前位置所处的楼层信息
//        if (location.getLocType() == BDLocation.TypeGpsLocation){
//            //当前为GPS定位结果，可获取以下信息
//            location.getSpeed();    //获取当前速度，单位：公里每小时
//            location.getSatelliteNumber();    //获取当前卫星数
//            location.getAltitude();    //获取海拔高度信息，单位米
//            location.getDirection();    //获取方向信息，单位度
//            System.out.println("stringmd5result=当前为GPS定位结果，可获取以下信息");
//        } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
//            //当前为网络定位结果，可获取以下信息
//            location.getOperators();    //获取运营商信息
//            System.out.println("stringmd5result=当前为网络定位结果，可获取以下信息");
//        } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {
//            //当前为网络定位结果
//            System.out.println("stringmd5result=当前为网络定位结果");
//        } else if (location.getLocType() == BDLocation.TypeServerError) {
//            //当前网络定位失败
//            //可将定位唯一ID、IMEI、定位失败时间反馈至loc-bugs@baidu.com
//            System.out.println("stringmd5result=当前网络定位失败");
//        } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
//            //当前网络不通
//            System.out.println("stringmd5result=当前网络不通");
//        } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
//            //当前缺少定位依据，可能是用户没有授权，建议弹出提示框让用户开启权限
//            //可进一步参考onLocDiagnosticMessage中的错误返回码
//            System.out.println("stringmd5result=当前缺少定位依据，可能是用户没有授权，建议弹出提示框让用户开启权限");
//        }

    }


    @Override
    public void onTerminate() {
        super.onTerminate();
    }


    public FunctionConfig initGalley(int pos ,int s) {
        ThemeConfig theme = new ThemeConfig.Builder()
                .build();
        //配置功能
        FunctionConfig functionConfig ;
        if (pos==1){
            functionConfig = new FunctionConfig.Builder()
                    .setEnableCamera(true)
                    .setEnableEdit(true)
                    .setEnableRotate(true)
                    .setCropSquare(true)
                    .setEnablePreview(true)
                    .build();
        }else {
            functionConfig = new FunctionConfig.Builder()
             .setMutiSelectMaxSize(s)//配置多选数量
                    .setEnableEdit(true)//开启编辑功能
                    .setEnableCrop(true)//开启裁剪功能
                    .setEnableRotate(true)//开启旋转功能
                    .setCropWidth(480)//裁剪宽度
                    .setCropHeight(800)//裁剪高度
                    .setCropSquare(false)//裁剪正方形
//              .setSelected(List)//添加已选列表,只是在列表中默认呗选中不会过滤图片
//              .setFilter(List list)//添加图片过滤，也就是不在GalleryFinal中显示
//              .takePhotoFolter(File file)//配置拍照保存目录，不做配置的话默认是/sdcard/DCIM/GalleryFinal/
                    .setRotateReplaceSource(true)//配置选择图片时是否替换原始图片，默认不替换
                    .setCropReplaceSource(true)//配置裁剪图片时是否替换原始图片，默认不替换
//              .setForceCrop(true)//启动强制裁剪功能,一进入编辑页面就开启图片裁剪，不需要用户手动点击裁剪，此功能只针对单选操作
//              .setForceCropEdit(true)//在开启强制裁剪功能时是否可以对图片进行编辑（也就是是否显示旋转图标和拍照图标）
                    .setEnablePreview(true)//是否开启预览功能;
                    .build();
        }
        XUtilsImageLoader imageLoader = new XUtilsImageLoader();
        CoreConfig coreConfig = new CoreConfig.Builder(this, imageLoader, theme)
                .setFunctionConfig(functionConfig)
                .setNoAnimcation(true)
                .build();
        GalleryFinal.init(coreConfig);

        return functionConfig;
    }
}

